home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / Touch.c < prev    next >
C/C++ Source or Header  |  1995-03-20  |  3KB  |  149 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     Touch.c
  6.  
  7.     DESCRIPTION
  8.     Touch checks the existance (via Lock) of files
  9.     and then either calls SetFileDate if they exist
  10.     or else creates new files
  11.  
  12.     NOTES
  13.     Kickstart 2.0+ required
  14.     compiles w/ SAS/C v6.51
  15.  
  16.     BUGS
  17.     none known
  18.  
  19.     TODO
  20.     wildcard processing
  21.  
  22.     EXAMPLES
  23.  
  24.     SEE ALSO
  25.  
  26.     INDEX
  27.  
  28.     HISTORY
  29.     12-02-95 b_noll created (accidently deleted the source)
  30.     12-02-95 b_noll created
  31.     20-02-95 b_noll restructured source
  32.     21-02-95 b_noll added version/format-prefix/offset
  33.     20-03-95 b_noll added args diagnostics
  34.  
  35.     AUTHOR
  36.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  37.     b_noll@informatik.uni-kl.de
  38.  
  39. ******************************************************************************/
  40.  
  41. /**************************************
  42.         Includes
  43. **************************************/
  44.  
  45. #ifndef   EXEC_LIBRARIES_H
  46. # include <exec/libraries.h>
  47. #endif /* EXEC_LIBRARIES_H */
  48.  
  49. #ifndef   CLIB_EXEC_PROTOS_H
  50. # include <clib/exec_protos.h>
  51. #endif /* CLIB_EXEC_PROTOS_H */
  52.  
  53. #ifndef   DOS_DOS_H
  54. # include <dos/dos.h>
  55. #endif /* DOS_DOS_H */
  56.  
  57. #ifndef   CLIB_DOS_PROTOS_H
  58. # include <clib/dos_protos.h>
  59. #endif /* CLIB_DOS_PROTOS_H */
  60.  
  61. #include <proto/dos.h>
  62. #include <proto/exec.h>
  63.  
  64. /**************************************
  65.      Defines & Structures
  66. **************************************/
  67.  
  68. #ifndef ABSEXECBASE
  69. #define ABSEXECBASE ((struct ExecBase **)4L)
  70. #endif
  71.  
  72. struct _arg {
  73. /* ******************** USER FORMAT ******************** */
  74. #define FORMAT "FILE/A/M"
  75.  
  76.     STRPTR *file;
  77.  
  78. /* ******************** USER FORMAT ******************** */
  79. }; /* struct _argv */
  80.  
  81. #define MAXPATHLEN 256
  82. #define MAXLINELEN 256
  83.  
  84. #define VERSIONPREFIX    "\0$VER: "
  85. #define VERSIONOFFSET    0
  86. #define FORMATPREFIX    "\0$ARG: "
  87. #define FORMATOFFSET    7
  88.  
  89. /**************************************
  90.         Implementation
  91. **************************************/
  92.  
  93. long _main (void)
  94. {
  95.     const char* version = VERSIONPREFIX "Touch 1.2 " __AMIGADATE__ + VERSIONOFFSET;
  96.     long retval = RETURN_FAIL;
  97.     struct ExecBase*SysBase = *ABSEXECBASE;
  98.     struct Library* DOSBase;
  99.  
  100.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  101.     struct _arg argv = { 0 };
  102.     APTR   args;
  103.     retval     = RETURN_ERROR;
  104.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  105. /* ******************** USER BODY ******************** */
  106.  
  107.         int    i;
  108.         BPTR   bptr;
  109.         STRPTR name;
  110.         struct DateStamp ds;
  111.  
  112.         retval = RETURN_OK;
  113.  
  114.         for (i = 0; name = argv.file[i]; ++i) {
  115.  
  116.         DateStamp(&ds);
  117.  
  118.         if (bptr = Lock(name, SHARED_LOCK)) {
  119.             UnLock(bptr);
  120.  
  121.             if (!SetFileDate(name, &ds)) {
  122.             retval = RETURN_ERROR;
  123.             break;
  124.             } /* if */
  125.         } else if (bptr = Open(name, MODE_NEWFILE)) {
  126.             Close(bptr);
  127.         } else {
  128.             retval = RETURN_ERROR;
  129.             break;
  130.         } /* if */
  131.         } /* for */
  132.  
  133. /* ******************** USER BODY ******************** */
  134.         FreeArgs (args);
  135.     } /* if */
  136.  
  137.     if (retval > RETURN_WARN)
  138.         PrintFault(IoErr(), "Touch");
  139.  
  140.     CloseLibrary (DOSBase);
  141.     } /* if */
  142.     return (retval);
  143. } /* _main */
  144.  
  145. /******************************************************************************
  146. *****  END Touch.c
  147. ******************************************************************************/
  148.  
  149.